﻿namespace PauloMorgado.Phone.Services.Reactive
{
    using System;
    using System.Device.Location;

    public interface IGeoCoordinateReactiveService
    {
        GeoPositionAccuracy DesiredAccuracy { get; }
        double MovementThreshold { get; set; }
        GeoPosition<GeoCoordinate> Position { get; }
        GeoPositionStatus Status { get; }
        GeoPositionPermission Permission { get; }
        IObservable<GeoPosition<GeoCoordinate>> PositionObservable { get; }
        IObservable<GeoPositionStatus> StatusObservable { get; }

        bool TryStart(bool suppressPermissionPrompt, TimeSpan timeout);
        void Stop();
        void Start(bool suppressPermissionPrompt);
        void Start();
    }
}
